package com.jiuzhou.crawlers.taobao.pipeline.taobao;

import java.util.Map;

import org.apache.commons.codec.digest.DigestUtils;

import com.jiuzhou.crawlers.taobao.crawler.taobao.TaoBaoStart;
import com.jiuzhou.crawlers.taobao.util.HdfsUtil;

import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;

/**
	 * 项目名称：商品爬虫
	 * @author yanganzhen
	 * version-code：1.0
     * 类说明：淘宝数据持久化处理类
     * 创建时间：2016年12月5日
	 */
public class TaoBaoPipeline implements Pipeline{
	
    private String filePath;//hadoop文件夹路径
    
    public  static StringBuffer goodsStringBuffer = new StringBuffer();//商品信息缓存字符串
    
    public final static String storeNum = "5400";//链接中包含的商品项目数，到达时进行文件存储
    
	/** 爬虫持久化类构造函数，传入文件路径
	 * @param filePath
	 */
	public TaoBaoPipeline(String filePath){
		this.filePath =filePath;
	}
	
	
	/**方法名称：process()
	 * 方法说明：处理 持久化 存储爬取类容
	 */
	@Override
	public synchronized void process(ResultItems resultItems, Task arg1) {
		//为存储的文件取名，名字为搜索的关键词
		if (!this.filePath.endsWith("/"))
			this.filePath += "/";
		int wordsBegain = resultItems.getRequest().getUrl().toString().indexOf("q=");
     	int wordsEnd = resultItems.getRequest().getUrl().toString().indexOf("&");
		String fileName =resultItems.getRequest().getUrl().toString().substring(wordsBegain+2,wordsEnd);
		String path = this.filePath+fileName ;
		
		//输出page.putFiel中的所有键值对
		for (Map.Entry<String, Object> entry : resultItems.getAll().entrySet()) {
			
			//不保存为空的属性值
			if(!entry.getValue().toString().trim().equals("[]")){
				goodsStringBuffer.append(entry.getKey() + ":\t" + entry.getValue() + "\n");
			}else{
				//System.out.println("值为空");
			}

		}
		System.out.println("完成网页类容爬取-----------------------"+resultItems.getRequest().getUrl()+"---------------------------");	
		 //淘宝商品爬取到多少时进行文件存储
	       	if( resultItems.getRequest().getUrl().contains(storeNum)){
		       	HdfsUtil.WriteToHdfs(path,goodsStringBuffer.toString());
		        //清除缓存用于下一项商品爬取
		       	goodsStringBuffer.delete(0,goodsStringBuffer.length()-1);
	    	}
	}//end of process

}//end of class
